package cn.com.zzl.util;

/**
 * 说明：方法内容具备通用性！
 * Description： Java获取当前类名、方法名以及方法调用者类名、方法名
 * Created by 朱正磊 on 2017-05-18 17:58.
 */
@SuppressWarnings("all")
public class ClassUtil {

	/**
	 * @Desc 获取当前的类名
	 * @return 返回当前的类名
	 */
	public static String getCurrentClassName() {
		return new Throwable().getStackTrace()[0].getClassName();
	}

	/**
	 * @Desc 获取当前的方法名
	 * @return 返回当前的方法名
	 */
	public static String getCurrentMethodName() {
		return new Throwable().getStackTrace()[0].getMethodName();
	}

	/**
	 * @Desc 获取当前的类名、方法名、行号
	 * @return 返回当前的类名、方法名、行号
	 */
	public static String getCurrentInfo() {
		StringBuilder builder = new StringBuilder();
		StackTraceElement current = new Throwable().getStackTrace()[0];
		builder.append("【类全名：")
				.append(current.getClassName())
				.append("；方法名：")
				.append(current.getMethodName())
				.append("；行号：")
				.append(current.getLineNumber())
				.append("】");
		return builder.toString();
	}

	/**
	 * @Desc 获取方法调用者的类名
	 * @return 返回方法调用者的类名
	 */
	public static String getInvokingClassName() {
		StringBuilder builder = new StringBuilder();
		String className = new Throwable().getStackTrace()[1].getClassName();
		builder.append("【类全名：")
				.append(className)
				.append("】");
		return builder.toString();
	}

	/**
	 * @Desc 获取方法调用者的方法名
	 * @return 返回方法调用者的方法名
	 */
	public static String getInvokingMethodName() {
		StringBuilder builder = new StringBuilder();
		String methodName = new Throwable().getStackTrace()[1].getMethodName();
		builder.append("【方法名：")
				.append(methodName)
				.append("】");
		return builder.toString();
	}

	/**
	 * @Desc 获取方法调用者的类名、方法名、行号
	 * @return 返回方法调用者的类名、方法名、行号
	 */
	public static String getInvokingInfo() {
		StringBuilder builder = new StringBuilder();
		StackTraceElement invoking = new Throwable().getStackTrace()[1];
		builder.append("【类全名：")
				.append(invoking.getClassName())
				.append("；方法名：")
				.append(invoking.getMethodName())
				.append("；行号：")
				.append(invoking.getLineNumber())
				.append("】");
		return builder.toString();
	}

}
